home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
SPACE 2
/
SPACE - Library 2 - Volume 1.iso
/
games
/
2a
/
applicat.ion
/
slider.c
< prev
next >
Wrap
Text File
|
1985-05-29
|
10KB
|
332 lines
/*********************************/
/* Slider routine test 1/24/85 */
/* by Tom Hudson */
/*********************************/
#include "portab.h"
#include "b:slides.h"
int contrl[12];
int intin[128];
int ptsin[128];
int intout[128];
int ptsout[128];
int i,j,k,n,x,y,handle,l_intin[11],l_out[57];
int gr_1,gr_2,gr_3,gr_4;
int l_ptsin[20],pxy[2],ptemp[1],temp;
int diax,diay,diaw,diah;
int formresult,key;
int slider0=1,slider1=5,slider2=0,slider3=8;
long diaaddr;
/****************************************************/
/* Set up these variables for the slider subroutine */
/* They allow up to 10 sliders per dialog box! */
/****************************************************/
float slidstep[10],slidacc[10];
int slidpos[10],slidmax[10];
main()
{
appl_init();
handle=graf_handle(&gr_1,&gr_2,&gr_3,&gr_4);
/* open workstation */
l_intin[0] = 1;
for (i = 1; i < 10; i++)
l_intin[i] = 1;
l_intin[10] = 2;
v_opnvwk(l_intin, &handle, l_out);
rsrc_load(&"slides.rsc");
/**********************/
/* Get dialog address */
/**********************/
rsrc_gaddr(0,SLIDIA,&diaaddr);
graf_mouse(0,0L);
v_show_c(handle,0);
/****************************************************/
/* Draw dialog and handle user interaction */
/****************************************************/
redo_form:
form_center(diaaddr,&diax,&diay,&diaw,&diah);
form_dial(0,0,0,0,0,diax,diay,diaw,diah);
objc_draw(diaaddr,0,2,diax,diay,diaw,diah);
/****************************************************/
/* Initialize all sliders to their current settings */
/****************************************************/
hreset(0,diaaddr,TRACK0,SLIDER0,10,slider0);
hreset(1,diaaddr,TRACK1,SLIDER1,20,slider1);
vreset(2,diaaddr,TRACK2,SLIDER2,22,slider2);
vreset(3,diaaddr,TRACK3,SLIDER3,8,slider3);
/****************************************************/
/* Do the form! */
/****************************************************/
formloop:
formresult=form_do(diaaddr,0);
/****************************************************/
/* Find which slider to process & do it. */
/****************************************************/
if((formresult==LEFT0) || (formresult==RIGHT0) || (formresult==SLIDER0))
{
do_hslider(0,diaaddr,TRACK0,SLIDER0,LEFT0,RIGHT0,formresult);
goto formloop;
}
else
if((formresult==LEFT1) || (formresult==RIGHT1) || (formresult==SLIDER1))
{
do_hslider(1,diaaddr,TRACK1,SLIDER1,LEFT1,RIGHT1,formresult);
goto formloop;
}
else
if((formresult==UP2) || (formresult==DOWN2) || (formresult==SLIDER2))
{
do_vslider(2,diaaddr,TRACK2,SLIDER2,UP2,DOWN2,formresult);
goto formloop;
}
else
if((formresult==UP3) || (formresult==DOWN3) || (formresult==SLIDER3))
{
do_vslider(3,diaaddr,TRACK3,SLIDER3,UP3,DOWN3,formresult);
goto formloop;
}
else
/****************************************************/
/* If OK pressed, grab the slider settings */
/****************************************************/
if(formresult==EXITOK)
{
slider0=slidpos[0];
slider1=slidpos[1];
slider2=slidpos[2];
slider3=slidpos[3];
}
else
/****************************************************/
/* If any button besides CANCEL, continue form_do */
/****************************************************/
if(formresult!=EXITCAN)
goto formloop;
/****************************************************/
/* Form exited, reset OK & CANCEL */
/****************************************************/
objc_change(diaaddr,EXITOK,0,diax,diay,diaw,diah,0,1);
objc_change(diaaddr,EXITCAN,0,diax,diay,diaw,diah,0,1);
form_dial(3,0,0,0,0,diax,diay,diaw,diah);
/****************************************************/
/* Get key. If CR, quit. If other key, re-enter */
/* the form to test for proper slider settings. */
/****************************************************/
key=evnt_keybd();
if(key != 0x1c0d)
goto redo_form;
/* Close the workstation. */
rsrc_free();
v_clsvwk(handle);
appl_exit();
_exit(0);
}
/****************************************************/
/* RESET HORIZONTAL SLIDER */
/* ----------------------- */
/* Parameters: */
/* number = slider number (0-9) */
/* tree = address of dialog tree */
/* trackix = index of slider track */
/* slidix = index of slider */
/* maximum = maximum slider setting (0-maximum) */
/* initial = initial slider setting (0-maximum) */
/****************************************************/
hreset(number,tree,trackix,slidix,maximum,initial)
int number,tree[][12],trackix,slidix,maximum,initial;
{
float work1,work2;
slidmax[number]=maximum;
slidpos[number]=initial;
work1=(tree[trackix][10]-tree[slidix][10]);
work2=maximum;
work1/=work2;
slidstep[number]=work1;
work2=initial;
slidacc[number]=work1*work2;
tree[slidix][8]=slidacc[number];
objc_draw(tree,trackix,1,tree[0][8],tree[0][9],tree[0][10],tree[0][11]);
}
/****************************************************/
/* RESET VERTICAL SLIDER */
/* ---------------------- */
/* Parameters: */
/* number = slider number (0-9) */
/* tree = address of dialog tree */
/* trackix = index of slider track */
/* slidix = index of slider */
/* maximum = maximum slider setting (0-maximum) */
/* initial = initial slider setting (0-maximum) */
/****************************************************/
vreset(number,tree,trackix,slidix,maximum,initial)
int number,tree[][12],trackix,slidix,maximum,initial;
{
float work1,work2;
slidmax[number]=maximum;
slidpos[number]=initial;
work1=(tree[trackix][11]-tree[slidix][11]);
work2=maximum;
work1/=work2;
slidstep[number]=work1;
work2=initial;
slidacc[number]=work1*work2;
tree[slidix][9]=slidacc[number];
objc_draw(tree,trackix,1,tree[0][8],tree[0][9],tree[0][10],tree[0][11]);
}
/****************************************************/
/* PROCESS HORIZONTAL SLIDER */
/* ------------------------- */
/* Parameters: */
/* number = slider number (0-9) */
/* tree = address of dialog tree */
/* trackix = index of slider track */
/* slidix = index of slider */
/* leftix = index of left-move button */
/* rightix = index of right-move button */
/* whichix = index of item from form_do */
/****************************************************/
do_hslider(number,tree,trackix,slidix,leftix,rightix,whichix)
int tree[][12],trackix,slidix,leftix,rightix,whichix;
{
int tempx,tempy,sbasex,sbasey,tbasex,tbasey;
if(whichix==rightix)
{
if(slidpos[number]<slidmax[number])
{
slidacc[number]+=slidstep[number];
slidpos[number]++;
tree[slidix][8]=slidacc[number];
objc_draw(tree,trackix,1,tree[0][8],tree[0][9],tree[0][10],tree[0][11]);
}
}
else
if(whichix==leftix)
{
if(slidpos[number]>0)
{
slidacc[number]-=slidstep[number];
slidpos[number]--;
tree[slidix][8]=slidacc[number];
objc_draw(tree,trackix,1,tree[0][8],tree[0][9],tree[0][10],tree[0][11]);
}
}
else
if(whichix==slidix)
{
objc_offset(tree,slidix,&sbasex,&sbasey);
objc_offset(tree,trackix,&tbasex,&tbasey);
graf_dragbox(tree[slidix][10],tree[slidix][11],sbasex,sbasey,
tbasex,tbasey,tree[trackix][10],tree[trackix][11],
&tempx,&tempy);
if(tempx!=sbasex)
{
slidacc[number]=tempx-tbasex;
slidpos[number]=slidacc[number]/slidstep[number];
slidacc[number]=slidpos[number];
slidacc[number]*=slidstep[number];
tree[slidix][8]=slidacc[number];
objc_draw(tree,trackix,1,tree[0][8],tree[0][9],tree[0][10],tree[0][11]);
}
}
}
/****************************************************/
/* PROCESS VERTICAL SLIDER */
/* ----------------------- */
/* Parameters: */
/* number = slider number (0-9) */
/* tree = address of dialog tree */
/* trackix = index of slider track */
/* slidix = index of slider */
/* upix = index of up-move button */
/* downix = index of down-move button */
/* whichix = index of item from form_do */
/****************************************************/
do_vslider(number,tree,trackix,slidix,upix,downix,whichix)
int tree[][12],trackix,slidix,upix,downix,whichix;
{
int tempx,tempy,sbasex,sbasey,tbasex,tbasey;
if(whichix==downix)
{
if(slidpos[number]<slidmax[number])
{
slidacc[number]+=slidstep[number];
slidpos[number]++;
tree[slidix][9]=slidacc[number];
objc_draw(tree,trackix,1,tree[0][8],tree[0][9],tree[0][10],tree[0][11]);
}
}
else
if(whichix==upix)
{
if(slidpos[number]>0)
{
slidacc[number]-=slidstep[number];
slidpos[number]--;
tree[slidix][9]=slidacc[number];
objc_draw(tree,trackix,1,tree[0][8],tree[0][9],tree[0][10],tree[0][11]);
}
}
else
if(whichix==slidix)
{
objc_offset(tree,slidix,&sbasex,&sbasey);
objc_offset(tree,trackix,&tbasex,&tbasey);
graf_dragbox(tree[slidix][10],tree[slidix][11],sbasex,sbasey,
tbasex,tbasey,tree[trackix][10],tree[trackix][11],
&tempx,&tempy);
if(tempy!=sbasey)
{
slidacc[number]=tempy-tbasey;
slidpos[number]=slidacc[number]/slidstep[number];
slidacc[number]=slidpos[number];
slidacc[number]*=slidstep[number];
tree[slidix][9]=slidacc[number];
objc_draw(tree,trackix,1,tree[0][8],tree[0][9],tree[0][10],tree[0][11]);
}
}
}
əXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX